<html>
<head><meta charset="utf-8"><title>GAT Projection #86993 · wg-traits · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/index.html">wg-traits</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html">GAT Projection #86993</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="245449392"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245449392" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245449392">(Jul 09 2021 at 14:21)</a>:</h4>
<p>So <span class="user-mention" data-user-id="232957">@Jack Huey</span> I'm reading the code</p>



<a name="245449599"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245449599" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245449599">(Jul 09 2021 at 14:23)</a>:</h4>
<p>My concern is for the case where an inference variable is returned</p>



<a name="245449631"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245449631" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245449631">(Jul 09 2021 at 14:23)</a>:</h4>
<p>Really, that's the problem always here, right?</p>



<a name="245449679"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245449679" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245449679">(Jul 09 2021 at 14:23)</a>:</h4>
<p>Regardless of where the bound region appears, we need (I believe) to maintain the invariant that bound regions cannot appear in the value of inference variables</p>



<a name="245449755"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245449755" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245449755">(Jul 09 2021 at 14:24)</a>:</h4>
<p>How often does normalization result in an inference variable (at least, an inference variable that didn't appear in the <em>original source types</em>)</p>



<a name="245449769"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245449769" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245449769">(Jul 09 2021 at 14:24)</a>:</h4>
<p>One case is in the event of an error</p>



<a name="245449802"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245449802" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245449802">(Jul 09 2021 at 14:24)</a>:</h4>
<p>Another, I believe, is in the case of ambiguity</p>



<a name="245450016"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450016" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450016">(Jul 09 2021 at 14:26)</a>:</h4>
<p>I believe that if we have a <em>successful</em> candidate, however, this should never happen</p>



<a name="245450065"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450065" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450065">(Jul 09 2021 at 14:26)</a>:</h4>
<p>We will create inference variables when matching against an impl, but they should be equated with the input types, and hence take a value from there</p>



<a name="245450255"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450255" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450255">(Jul 09 2021 at 14:28)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993/near/245449769">said</a>:</p>
<blockquote>
<p>One case is in the event of an error</p>
</blockquote>
<p>Maybe we can use something else for this case, e.g., an unnormalized projection</p>



<a name="245450291"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450291" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450291">(Jul 09 2021 at 14:28)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993/near/245449802">said</a>:</p>
<blockquote>
<p>Another, I believe, is in the case of ambiguity</p>
</blockquote>
<p>This is the hard one</p>



<a name="245450344"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450344" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450344">(Jul 09 2021 at 14:29)</a>:</h4>
<p>I wonder if it's time to consider <em>lazy normalization</em> as an alternative</p>



<a name="245450368"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450368" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450368">(Jul 09 2021 at 14:29)</a>:</h4>
<p>but a slightly different form than the way chalk approached it</p>



<a name="245450442"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450442" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450442">(Jul 09 2021 at 14:29)</a>:</h4>
<p>what if we had <code>UnnormalizedProjection</code> as a type, and we only produced it <em>in the case of ambiguity</em></p>



<a name="245450501"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450501" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450501">(Jul 09 2021 at 14:30)</a>:</h4>
<p>and then, when we try to equate it with another type, we would generate the obvious obligations</p>



<a name="245450569"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450569" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450569">(Jul 09 2021 at 14:30)</a>:</h4>
<p>(actually, if we did that, we could plausibly use it for errors too)</p>



<a name="245450640"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450640" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450640">(Jul 09 2021 at 14:30)</a>:</h4>
<p>the other option, of course, is to use this technique to make the "best effort" approach we talked about</p>



<a name="245450684"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450684" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450684">(Jul 09 2021 at 14:31)</a>:</h4>
<p>and -- if there are binders present -- we will invoke <code>opt_normalize_projection_type</code> and just refuse to do anything in the case of ambiguity</p>



<a name="245450703"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450703" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450703">(Jul 09 2021 at 14:31)</a>:</h4>
<p>(just treat it like we do today, which will likely yield an ICE somewhere down the line)</p>



<a name="245450752"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245450752" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245450752">(Jul 09 2021 at 14:31)</a>:</h4>
<p>I wonder if that will lead to fresh kinds of compilation errors, where something normalizes successfully in one context, but not another</p>



<a name="245453274"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245453274" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245453274">(Jul 09 2021 at 14:52)</a>:</h4>
<p>So, good questions</p>



<a name="245453421"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245453421" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245453421">(Jul 09 2021 at 14:53)</a>:</h4>
<p>First, there's not a case right now in the tests where we can't project when there's only a gat bound var</p>



<a name="245453522"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245453522" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245453522">(Jul 09 2021 at 14:54)</a>:</h4>
<p>(I actually had a <code>bug!()</code>in the unwrap_or_else)</p>



<a name="245453624"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245453624" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245453624">(Jul 09 2021 at 14:55)</a>:</h4>
<p>But, I would need to dig into it a little</p>



<a name="245453993"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245453993" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245453993">(Jul 09 2021 at 14:58)</a>:</h4>
<p>As I said, I think one reasonable alternative is to just return a ty::Error. Given that we would only error out <em>under GATs</em>, it's not like we would break anything stable</p>



<a name="245454078"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245454078" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245454078">(Jul 09 2021 at 14:59)</a>:</h4>
<p>And it gives us a chance to move GATs forward and see what bug reports we get</p>



<a name="245454167"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245454167" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245454167">(Jul 09 2021 at 14:59)</a>:</h4>
<p>I did think about the <code>UnnormalizedProjection</code></p>



<a name="245454322"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245454322" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245454322">(Jul 09 2021 at 15:00)</a>:</h4>
<p>But didn't think hard enough to consider exactly how to use it</p>



<a name="245455283"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245455283" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245455283">(Jul 09 2021 at 15:08)</a>:</h4>
<p>I'm debating about the idea of </p>
<ul>
<li>make a best effort for now, maybe even only with GATs to start</li>
<li>experiment with "unnormalized projection" as a follow-up (for all bound variables, hopefully)</li>
</ul>



<a name="245458544"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245458544" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245458544">(Jul 09 2021 at 15:33)</a>:</h4>
<p>That sounds about like what I would prefer</p>



<a name="245458632"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245458632" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245458632">(Jul 09 2021 at 15:34)</a>:</h4>
<p>Given that, how do you feel about <a href="https://github.com/rust-lang/rust/issues/86993">#86993</a> as-is?</p>



<a name="245468320"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245468320" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245468320">(Jul 09 2021 at 16:55)</a>:</h4>
<p>I don't think it quite does the "best effort" I have in mind</p>



<a name="245468325"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245468325" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245468325">(Jul 09 2021 at 16:55)</a>:</h4>
<p>I'll make some suggestions</p>



<a name="245682126"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245682126" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245682126">(Jul 12 2021 at 13:00)</a>:</h4>
<p>Hey <span class="user-mention" data-user-id="232957">@Jack Huey</span> -- talk ?</p>



<a name="245682179"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245682179" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245682179">(Jul 12 2021 at 13:00)</a>:</h4>
<p>yep, joining now :)</p>



<a name="245682342"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245682342" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245682342">(Jul 12 2021 at 13:01)</a>:</h4>
<p>(If other wg-traits folks want to join, the invite is in the calendar, with a zoom url)</p>



<a name="245730187"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245730187" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245730187">(Jul 12 2021 at 18:49)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> btw <a href="https://github.com/rust-lang/rust/blob/master/src/test/ui/issues/issue-60283.rs">https://github.com/rust-lang/rust/blob/master/src/test/ui/issues/issue-60283.rs</a> is one example of a test that fails when we "fall back" to not normalizing (and just returning the  <code>ProjectionTy</code> itself) instead of registering a suboligation</p>



<a name="245730270"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245730270" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245730270">(Jul 12 2021 at 18:50)</a>:</h4>
<p>Get an error something like:</p>
<div class="codehilite"><pre><span></span><code>   |             expected signature of `for&lt;&#39;a&gt; fn(&lt;() as Trait&lt;&#39;a&gt;&gt;::Item) -&gt; _`
   |             found signature of `fn(()) -&gt; _`
</code></pre></div>



<a name="245730916"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245730916" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245730916">(Jul 12 2021 at 18:54)</a>:</h4>
<p>I think there is some good news here</p>



<a name="245731319"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245731319" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245731319">(Jul 12 2021 at 18:57)</a>:</h4>
<p>I think of all the tests that fail, I only see one ICE. But it's because there was a failed normalization at codegen or something.</p>



<a name="245731397"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245731397" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245731397">(Jul 12 2021 at 18:57)</a>:</h4>
<p>But the rest are just "type mismatches" or such</p>



<a name="245732075"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245732075" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245732075">(Jul 12 2021 at 19:01)</a>:</h4>
<p>And this <em>might</em> mean that sticking a normalization call or two somewhere later might fix this</p>



<a name="245732076"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245732076" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245732076">(Jul 12 2021 at 19:01)</a>:</h4>
<p>It's a bit peculiar to me in, for example, that test above, that we have problems <em>now</em></p>



<a name="245732152"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245732152" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245732152">(Jul 12 2021 at 19:01)</a>:</h4>
<p>Since this is basically what we were doing before, since that has a bound var</p>



<a name="245732633"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245732633" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245732633">(Jul 12 2021 at 19:04)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/pull/85499/files#diff-6668b42c7ad7c5245f6ef60bfb63ceb7162f32fe7a48e8f4dfbec803ba2b0122L18">https://github.com/rust-lang/rust/pull/85499/files#diff-6668b42c7ad7c5245f6ef60bfb63ceb7162f32fe7a48e8f4dfbec803ba2b0122L18</a></p>



<a name="245732651"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245732651" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245732651">(Jul 12 2021 at 19:04)</a>:</h4>
<p>oh, this isn't a regression, just a reversion</p>



<a name="245732915"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245732915" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245732915">(Jul 12 2021 at 19:06)</a>:</h4>
<p>Okay here is the full list</p>
<div class="codehilite"><pre><span></span><code>    [ui] ui/associated-types/hr-associated-type-bound-object.rs
    [ui] ui/associated-types/normalization-generality.rs
    [ui] ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-1.rs
    [ui] ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.rs
    [ui] ui/higher-rank-trait-bounds/normalize-under-binder/issue-70120.rs
    [ui] ui/hrtb/issue-62203-hrtb-ice.rs
    [ui] ui/issues/issue-44005.rs
    [ui] ui/issues/issue-60283.rs
</code></pre></div>



<a name="245733250"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245733250" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245733250">(Jul 12 2021 at 19:09)</a>:</h4>
<p>okay shoot, I think <code>ui/associated-types/normalization-generality.rs</code> (which is a new test) is the only one that we <em>really</em> need to worry about</p>



<a name="245733404"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245733404" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245733404">(Jul 12 2021 at 19:10)</a>:</h4>
<p>The others just fall under "incomplete". And we don't <em>quite</em> do as well as we were <em>going to</em>, but there aren't any real regressions. And this still does fix the ICEs</p>



<a name="245776798"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245776798" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245776798">(Jul 13 2021 at 03:55)</a>:</h4>
<p>Well, of course the GATs-only branch runs into the "layout code is calling <code>normalize_erasing_regions</code> without wrapping a <code>Binder</code>" problem</p>



<a name="245776862"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245776862" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245776862">(Jul 13 2021 at 03:56)</a>:</h4>
<p><code>Instance::fn_sig_for_fn_abi</code> is where I've seen this originate from</p>



<a name="245776914"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245776914" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245776914">(Jul 13 2021 at 03:58)</a>:</h4>
<p>ah, interesting. So it is wrapped in a  <code>Binder</code>...</p>



<a name="245776963"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245776963" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245776963">(Jul 13 2021 at 03:59)</a>:</h4>
<p>The problem is <code>NormalizeAfterErasingRegionsFolder</code></p>



<a name="245777090"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245777090" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245777090">(Jul 13 2021 at 04:01)</a>:</h4>
<p>That folds through and normalizes types and consts individually</p>



<a name="245777304"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245777304" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245777304">(Jul 13 2021 at 04:05)</a>:</h4>
<p>If it weren't for that <code>fold_mir_const</code> there, this might be a really straightforward change (might still be, but not sure)</p>



<a name="245777393"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245777393" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245777393">(Jul 13 2021 at 04:06)</a>:</h4>
<p>I guess maybe it's done this way because <code>normalize_generic_arg_after_erasing_regions</code> is a query</p>



<a name="245835715"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245835715" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245835715">(Jul 13 2021 at 14:48)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> another rabbit hole :(</p>



<a name="245867841"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245867841" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245867841">(Jul 13 2021 at 18:33)</a>:</h4>
<p>I think I can paper over this by just making that <code>normalize_erasing_regions</code> call conditional on polymorphization for now</p>



<a name="245867858"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245867858" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245867858">(Jul 13 2021 at 18:33)</a>:</h4>
<p>This just feels like a tower of cards</p>



<a name="245873314"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245873314" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245873314">(Jul 13 2021 at 19:14)</a>:</h4>
<p>Okay, so I did that and now <a href="https://github.com/rust-lang/rust/issues/86993">#86993</a> should be ready</p>



<a name="245873767"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/245873767" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#245873767">(Jul 13 2021 at 19:18)</a>:</h4>
<p>Also opened <a href="https://github.com/rust-lang/rust/issues/87113">#87113</a> and a queued a perf run</p>



<a name="246092646"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092646" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092646">(Jul 15 2021 at 13:24)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> I'm reading <a href="https://github.com/rust-lang/rust/issues/86993">#86993</a></p>



<a name="246092694"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092694" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092694">(Jul 15 2021 at 13:25)</a>:</h4>
<p>I'm around</p>



<a name="246092717"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092717" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092717">(Jul 15 2021 at 13:25)</a>:</h4>
<p>So</p>



<a name="246092718"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092718" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092718">(Jul 15 2021 at 13:25)</a>:</h4>
<p>Available to chat if you would like</p>



<a name="246092732"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092732" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092732">(Jul 15 2021 at 13:25)</a>:</h4>
<p>I have one comment, but I also would like to know if there are any outstanding bugs</p>



<a name="246092753"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092753" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092753">(Jul 15 2021 at 13:25)</a>:</h4>
<p>I can't quite tell if your comments above were...resolved?</p>



<a name="246092775"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092775" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092775">(Jul 15 2021 at 13:25)</a>:</h4>
<p>No bugs</p>



<a name="246092776"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092776" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092776">(Jul 15 2021 at 13:25)</a>:</h4>
<p><span class="user-mention silent" data-user-id="232957">Jack Huey</span> <a href="#narrow/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993/near/245867841">said</a>:</p>
<blockquote>
<p>I think I can paper over this by just making that <code>normalize_erasing_regions</code> call conditional on polymorphization for now</p>
</blockquote>
<p>I guess this is the answer?</p>



<a name="246092804"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092804" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092804">(Jul 15 2021 at 13:25)</a>:</h4>
<p>That indeed is resolved</p>



<a name="246092864"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092864" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092864">(Jul 15 2021 at 13:26)</a>:</h4>
<p>See the comment in query/normalize</p>



<a name="246092944"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092944" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092944">(Jul 15 2021 at 13:26)</a>:</h4>
<p>Basically, looks like the <code>fn_sig_for_fn_abi</code> call was the only source of escaping bound vars being passed to <code>query/normalize</code> <em>in current tests</em></p>



<a name="246092982"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246092982" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246092982">(Jul 15 2021 at 13:27)</a>:</h4>
<p>But the underlying issue in <code>normalize_erasing_regions</code> is still there</p>



<a name="246093073"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246093073" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246093073">(Jul 15 2021 at 13:27)</a>:</h4>
<p>So, the question is: do we just <code>bug!()</code> if we see escaping bound vars (and remove the hacky <code>self.failed</code>), or keep that and <em>possibly</em> recover</p>



<a name="246094569"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094569" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094569">(Jul 15 2021 at 13:39)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> question</p>



<a name="246094623"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094623" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094623">(Jul 15 2021 at 13:40)</a>:</h4>
<p>well, where is the workaround code?</p>



<a name="246094628"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094628" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094628">(Jul 15 2021 at 13:40)</a>:</h4>
<p>I must have missed it</p>



<a name="246094670"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094670" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094670">(Jul 15 2021 at 13:40)</a>:</h4>
<p>and where is the <code>bug!</code> call?</p>



<a name="246094736"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094736" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094736">(Jul 15 2021 at 13:40)</a>:</h4>
<p>I'll post the relevant bits</p>



<a name="246094738"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094738" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094738">(Jul 15 2021 at 13:40)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/pull/86993/files#diff-b0320c2b8868f325d83c027fc5d71732636e9763551e35895488f30fe057c6e9R2481">https://github.com/rust-lang/rust/pull/86993/files#diff-b0320c2b8868f325d83c027fc5d71732636e9763551e35895488f30fe057c6e9R2481</a></p>



<a name="246094780"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094780" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094780">(Jul 15 2021 at 13:41)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/pull/86993/files#diff-8d11697c196da9f44774488ae0bf353283e5c6466a6dd570d7818431b73d4a44R501">https://github.com/rust-lang/rust/pull/86993/files#diff-8d11697c196da9f44774488ae0bf353283e5c6466a6dd570d7818431b73d4a44R501</a></p>



<a name="246094865"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094865" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094865">(Jul 15 2021 at 13:41)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/pull/86993/files#diff-530297dac7d71b016d17cb5838d22065417f9020c3c3d4df773901a9e33c4814R239">https://github.com/rust-lang/rust/pull/86993/files#diff-530297dac7d71b016d17cb5838d22065417f9020c3c3d4df773901a9e33c4814R239</a></p>



<a name="246094935"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094935" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094935">(Jul 15 2021 at 13:42)</a>:</h4>
<p>oh man</p>



<a name="246094947"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246094947" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246094947">(Jul 15 2021 at 13:42)</a>:</h4>
<p>I just realized I was only reading 1 commit</p>



<a name="246095022"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095022" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095022">(Jul 15 2021 at 13:42)</a>:</h4>
<p><span aria-label="speechless" class="emoji emoji-1f636" role="img" title="speechless">:speechless:</span></p>



<a name="246095128"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095128" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095128">(Jul 15 2021 at 13:43)</a>:</h4>
<div class="codehilite" data-code-language="Rust"><pre><span></span><code><span class="w">   </span><span class="k">if</span><span class="w"> </span><span class="n">value</span><span class="p">.</span><span class="n">has_escaping_bound_vars</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="n">bug</span><span class="o">!</span><span class="p">(</span><span class="s">"Normalizing without wrapping in a `Binder`"</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>
</code></pre></div>



<a name="246095144"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095144" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095144">(Jul 15 2021 at 13:43)</a>:</h4>
<p>is that the <code>bug!</code> call you were talking about?</p>



<a name="246095201"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095201" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095201">(Jul 15 2021 at 13:44)</a>:</h4>
<p>there's another possible workaround here</p>



<a name="246095318"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095318" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095318">(Jul 15 2021 at 13:45)</a>:</h4>
<p>Nope</p>



<a name="246095340"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095340" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095340">(Jul 15 2021 at 13:45)</a>:</h4>
<p>That's never hit</p>



<a name="246095426"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095426" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095426">(Jul 15 2021 at 13:45)</a>:</h4>
<p>But the question is whether to add the equivalent before folding with <code>QueryNormalizer</code></p>



<a name="246095445"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095445" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095445">(Jul 15 2021 at 13:46)</a>:</h4>
<p>so</p>



<a name="246095473"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095473" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095473">(Jul 15 2021 at 13:46)</a>:</h4>
<p>the <code>failed</code> bool</p>



<a name="246095525"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095525" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095525">(Jul 15 2021 at 13:46)</a>:</h4>
<p>that is set to true if... any part of the projected type includes bound regions from some "outer binder" that we haven't traversed?</p>



<a name="246095558"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095558" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095558">(Jul 15 2021 at 13:46)</a>:</h4>
<p>yes</p>



<a name="246095637"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095637" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095637">(Jul 15 2021 at 13:47)</a>:</h4>
<p>This means we don't have to visit the whole type beforehand</p>



<a name="246095725"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095725" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095725">(Jul 15 2021 at 13:47)</a>:</h4>
<p>Can't we track the depth in the folder</p>



<a name="246095785"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095785" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095785">(Jul 15 2021 at 13:48)</a>:</h4>
<p>and then check if there is anything escaping outside that depth?</p>



<a name="246095811"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095811" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095811">(Jul 15 2021 at 13:48)</a>:</h4>
<p>e.g., instead of <code>ty::Projection(data) if !data.trait_ref(self.tcx()).has_escaping_bound_vars() =&gt; {</code></p>



<a name="246095866"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095866" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095866">(Jul 15 2021 at 13:48)</a>:</h4>
<p>something like</p>
<div class="codehilite" data-code-language="Rust"><pre><span></span><code><span class="n">ty</span>::<span class="n">Projection</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
<span class="w">    </span><span class="o">!</span><span class="n">data</span><span class="p">.</span><span class="n">has_bound_vars_escaping_depth</span><span class="p">(</span><span class="n">outer_depth</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"></span>
<span class="w">    </span><span class="o">!</span><span class="n">data</span><span class="p">.</span><span class="n">trait_ref</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">tcx</span><span class="p">()).</span><span class="n">has_escaping_bound_vars</span><span class="p">()</span><span class="w"></span>
<span class="p">)</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</code></pre></div>



<a name="246095929"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095929" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095929">(Jul 15 2021 at 13:49)</a>:</h4>
<p>then we could get rid of that <code>failed</code> logic, right?</p>



<a name="246095979"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095979" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095979">(Jul 15 2021 at 13:49)</a>:</h4>
<p>Yes. A bit less lazy, but probably fine</p>



<a name="246095996"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095996" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095996">(Jul 15 2021 at 13:49)</a>:</h4>
<p>has-bound-vars-escaping-depth is pretty fast</p>



<a name="246095999"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246095999" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246095999">(Jul 15 2021 at 13:49)</a>:</h4>
<p>(does that function exist? <code>has_bound_vars_escaping_depth</code>)</p>



<a name="246096050"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096050" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096050">(Jul 15 2021 at 13:50)</a>:</h4>
<p>something like it</p>



<a name="246096100"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096100" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096100">(Jul 15 2021 at 13:50)</a>:</h4>
<div class="codehilite" data-code-language="Rust"><pre><span></span><code><span class="w"> </span><span class="k">fn</span> <span class="nf">has_escaping_bound_vars</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">bool</span> <span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="bp">self</span><span class="p">.</span><span class="n">has_vars_bound_at_or_above</span><span class="p">(</span><span class="n">ty</span>::<span class="n">INNERMOST</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>
</code></pre></div>



<a name="246096110"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096110" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096110">(Jul 15 2021 at 13:50)</a>:</h4>
<p>I misremembered the name</p>



<a name="246096124"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096124" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096124">(Jul 15 2021 at 13:50)</a>:</h4>
<p>hmm</p>



<a name="246096280"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096280" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096280">(Jul 15 2021 at 13:51)</a>:</h4>
<p>Yeah, actually that should be goo, because <code>Ty</code> has <code>outer_exclusive_binder</code></p>



<a name="246096315"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096315" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096315">(Jul 15 2021 at 13:52)</a>:</h4>
<p>Okay, that's a better workaround</p>



<a name="246096399"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096399" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096399">(Jul 15 2021 at 13:52)</a>:</h4>
<p>But the question remains: do we keep it or just not allow them in the first place</p>



<a name="246096592"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096592" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096592">(Jul 15 2021 at 13:53)</a>:</h4>
<p>if we were not going to allow them</p>



<a name="246096615"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096615" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096615">(Jul 15 2021 at 13:53)</a>:</h4>
<p>I would want to do it by an <code>assert!</code> like what I wrote above</p>



<a name="246096673"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096673" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096673">(Jul 15 2021 at 13:54)</a>:</h4>
<p>hmm</p>



<a name="246096685"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096685" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096685">(Jul 15 2021 at 13:54)</a>:</h4>
<p>I'm tempted to disallow</p>



<a name="246096708"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096708" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096708">(Jul 15 2021 at 13:54)</a>:</h4>
<p>we can always fall back if people complain</p>



<a name="246096717"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096717" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096717">(Jul 15 2021 at 13:54)</a>:</h4>
<p>but it'd be good to know where else it happens</p>



<a name="246096767"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096767" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096767">(Jul 15 2021 at 13:54)</a>:</h4>
<p>that said, I think we would need to file a bug that blocks stabilizing polymorphization</p>



<a name="246096825"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096825" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096825">(Jul 15 2021 at 13:55)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993/near/246096615">said</a>:</p>
<blockquote>
<p>I would want to do it by an <code>assert!</code> like what I wrote above</p>
</blockquote>
<p>Where?</p>



<a name="246096874"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096874" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096874">(Jul 15 2021 at 13:55)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> <a href="#narrow/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993/near/246095128">said</a>:</p>
<blockquote>
<p><div class="codehilite" data-code-language="Rust"><pre><span></span><code><span class="w">   </span><span class="k">if</span><span class="w"> </span><span class="n">value</span><span class="p">.</span><span class="n">has_escaping_bound_vars</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="n">bug</span><span class="o">!</span><span class="p">(</span><span class="s">"Normalizing without wrapping in a `Binder`"</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>
</code></pre></div><br>
</p>
</blockquote>
<p>this?</p>



<a name="246096935"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096935" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096935">(Jul 15 2021 at 13:55)</a>:</h4>
<div class="codehilite" data-code-language="Rust"><pre><span></span><code><span class="n">ty</span>::<span class="n">Projection</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="n">data</span><span class="p">.</span><span class="n">trait_ref</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">tcx</span><span class="p">()).</span><span class="n">has_escaping_bound_vars</span><span class="p">()</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="fm">assert!</span><span class="p">(</span><span class="o">!</span><span class="n">data</span><span class="p">.</span><span class="n">has_bound_vars_escaping_depth</span><span class="p">(</span><span class="n">outer_depth</span><span class="p">));</span><span class="w"></span>
</code></pre></div>



<a name="246096963"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246096963" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246096963">(Jul 15 2021 at 13:55)</a>:</h4>
<p>and then we can remove <code>self.failed</code>, which makes the code messy</p>



<a name="246097071"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097071" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097071">(Jul 15 2021 at 13:56)</a>:</h4>
<p>I think I'd prefer to assert that before folding with <code>QueryNormalizer</code></p>



<a name="246097083"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097083" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097083">(Jul 15 2021 at 13:56)</a>:</h4>
<p>it gives more context</p>



<a name="246097227"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097227" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097227">(Jul 15 2021 at 13:57)</a>:</h4>
<p>yeah, as far up in the chain as you like</p>



<a name="246097234"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097234" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097234">(Jul 15 2021 at 13:57)</a>:</h4>
<p>or both places :)</p>



<a name="246097286"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097286" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097286">(Jul 15 2021 at 13:58)</a>:</h4>
<p>I am imagining that if we get an ICE with an "array index out of bounds" it'll be confusing, so an early assertion is good</p>



<a name="246097338"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097338" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097338">(Jul 15 2021 at 13:58)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/pull/86993#pullrequestreview-707339114">left review notes here</a></p>



<a name="246097697"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097697" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097697">(Jul 15 2021 at 14:00)</a>:</h4>
<p>yes, I even misinterpreted that error in the crater reports</p>



<a name="246097736"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097736" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097736">(Jul 15 2021 at 14:00)</a>:</h4>
<p>Okay, let me make these changes</p>



<a name="246097786"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097786" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097786">(Jul 15 2021 at 14:00)</a>:</h4>
<p>cool, ping me</p>



<a name="246097890"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246097890" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246097890">(Jul 15 2021 at 14:01)</a>:</h4>
<p>Should take about 10 minutes</p>



<a name="246098487"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246098487" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246098487">(Jul 15 2021 at 14:05)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> what do you mean by <a href="https://github.com/rust-lang/rust/pull/86993#discussion_r670476401">https://github.com/rust-lang/rust/pull/86993#discussion_r670476401</a></p>



<a name="246100621"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246100621" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246100621">(Jul 15 2021 at 14:19)</a>:</h4>
<p>Ah, okay, so does look like some const-generics tests are calling <code>query/normalize</code> with escaping bound vars (but none in GATs projections)</p>



<a name="246101308"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246101308" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246101308">(Jul 15 2021 at 14:23)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> interesting</p>



<a name="246101439"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246101439" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246101439">(Jul 15 2021 at 14:24)</a>:</h4>
<p><span class="user-mention silent" data-user-id="232957">Jack Huey</span> <a href="#narrow/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993/near/246098487">said</a>:</p>
<blockquote>
<p><span class="user-mention silent" data-user-id="116009">nikomatsakis</span> what do you mean by <a href="https://github.com/rust-lang/rust/pull/86993#discussion_r670476401">https://github.com/rust-lang/rust/pull/86993#discussion_r670476401</a></p>
</blockquote>
<p>oh, you can ignore that. I was just idling that this code would be clearer, I think, if rewritten like:</p>



<a name="246101508"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246101508" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246101508">(Jul 15 2021 at 14:25)</a>:</h4>
<div class="codehilite" data-code-language="Rust"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">value</span><span class="p">;</span><span class="w"></span>
<span class="k">loop</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">selcx</span><span class="p">.</span><span class="n">infcx</span><span class="p">().</span><span class="n">resolve_vars_if_possible</span><span class="p">(</span><span class="n">value</span><span class="p">);</span><span class="w"></span>

<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="n">value</span><span class="p">.</span><span class="n">has_escaping_bound_vars</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="n">bug</span><span class="o">!</span><span class="p">(</span><span class="s">"Normalizing without wrapping in a `Binder`"</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>

<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="o">!</span><span class="n">value</span><span class="p">.</span><span class="n">has_projections</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">value</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</code></pre></div>



<a name="246101722"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246101722" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246101722">(Jul 15 2021 at 14:26)</a>:</h4>
<p>Oh, I see. Unfortunately, I think that fails if we end up not replacing a projection</p>



<a name="246104224"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246104224" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246104224">(Jul 15 2021 at 14:42)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> just pushed commit addressing your review</p>



<a name="246105881"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246105881" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246105881">(Jul 15 2021 at 14:55)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> I made a mistake.</p>



<a name="246105898"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246105898" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246105898">(Jul 15 2021 at 14:55)</a>:</h4>
<p>I left a comment :)</p>



<a name="246106089"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246106089" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246106089">(Jul 15 2021 at 14:56)</a>:</h4>
<p>Ok I'll remove commit_if_ok</p>



<a name="246106918"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246106918" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246106918">(Jul 15 2021 at 15:01)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> ok updated. But I force pushed...did I see you make a change?</p>



<a name="246107036"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246107036" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246107036">(Jul 15 2021 at 15:01)</a>:</h4>
<p>oh, I just merged somebody's nit</p>



<a name="246107047"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246107047" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246107047">(Jul 15 2021 at 15:01)</a>:</h4>
<p>doesn't matter</p>



<a name="246107517"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246107517" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246107517">(Jul 15 2021 at 15:04)</a>:</h4>
<p>whoops</p>



<a name="246265609"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246265609" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246265609">(Jul 16 2021 at 19:07)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/issues/84623">#84623</a> just got merged, so GATs are <em>officially</em> no longer incomplete <span aria-label="tada" class="emoji emoji-1f389" role="img" title="tada">:tada:</span></p>



<a name="246804359"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20Projection%20%2386993/near/246804359" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20Projection.20.2386993.html#246804359">(Jul 22 2021 at 03:04)</a>:</h4>
<p><span class="user-group-mention" data-user-group-id="692">@WG-traits</span> please take a look and leave comments: <a href="https://github.com/rust-lang/blog.rust-lang.org/pull/869">https://github.com/rust-lang/blog.rust-lang.org/pull/869</a></p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>